package ${cfg.basePackage}.mybatis.gen;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * <p>
 * ${table.comment!} Mapper 接口
 * </p>
 *
 * @author ${author}
 * @date ${date}
 */
@Mapper
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
    /**
     * 查询是否存在
     *
     * @param id 数据 ID
     * @return true:存在  false:不存在
     */
    default boolean isHave(Object id) {
        return selectById(id.toString()) != null;
    }

    /**
     * 查询是否存在 (自动排除空参数（null,空字符串 都视作空）)
     *
     * @param param 实体类参数
     * @param type  [DAO.eq , DAO.ne ,DAO.lt ,DAO.le ... 等参数 详情请看 DaoKit.setParam]
     */
    default boolean isHaveByPo(${entity} param, String type) {
        Wrapper<${entity}> ${table.entityPath}Wrapper = new Wrapper<>();
        DaoKit.setParam(${table.entityPath}Wrapper, param, type);
        return selectList(${table.entityPath}Wrapper).size() > 0;
    }

    /**
     * 查询列表  (自动排除空参数（null,空字符串 都视作空）)
     *
     * @param param 实体类参数
     * @param type  [DAO.eq , DAO.ne ,DAO.lt ,DAO.le ... 等参数 详情请看 DaoKit.setParam]
     */
    default List<${entity}> listByPo(${entity} param, String type) {
        Wrapper<${entity}> ${table.entityPath}Wrapper = new Wrapper<>();
        DaoKit.setParam(${table.entityPath}Wrapper, param, type);
        return selectList(${table.entityPath}Wrapper);
    }

    /**
     * 查询数量  (自动排除空参数（null,空字符串 都视作空）)
     *
     * @param param 实体类参数
     * @param type  [DAO.eq , DAO.ne ,DAO.lt ,DAO.le ... 等参数 详情请看 DaoKit.setParam]
     */
    default Long countByPo(${entity} param, String type) {
        Wrapper<${entity}> ${table.entityPath}Wrapper = new Wrapper<>();
        DaoKit.setParam(${table.entityPath}Wrapper, param, type);
        return selectCount(${table.entityPath}Wrapper).longValue();
    }

    /**
     * 查询一条数据  (自动排除空参数（null,空字符串 都视作空）)
     *
     * @param param 实体类参数
     * @param type  [DAO.eq , DAO.ne ,DAO.lt ,DAO.le ... 等参数 详情请看 DaoKit.setParam]
     */
    default ${entity} oneByPo(${entity} param, String type) {
        Wrapper<${entity}> ${table.entityPath}Wrapper = new Wrapper<>();
        DaoKit.setParam(${table.entityPath}Wrapper, param, type);
        return selectOne(${table.entityPath}Wrapper);
    }

}
</#if>
